var init1 = (function(){
    // 函数声明只能提升到当前块级作用域的顶部
    {
        let a = 1;
        {
            // var a = 1; // a会提升
            function b(){
                console.log(10);
            }
            b();
        }
        console.log(a);
    }
})();

var constFn = (function(){
    // 1、const定义常量必须赋值，值不能被修改
    // 2、不能提升，存在暂时性死区
    // 3、不能重复声明
    // 4、只能在当前的作用域下生效
    const a = 1;
    // console.log(b); // 报错
    const b = 2;

    const obj = {}
    // Object.freeze(obj); // 冻结，不能添加属性
    obj.name = 'Mr. 赵';
    console.log(obj);
    // obj = {name: 'Mr. 张'} // 报错，const指针/地址不能更改

    function myFreeze(obj){
        Object.freeze(obj);
        for(var key in obj){
            if(typeof(obj[key]) === 'object' && obj[key] !== null){
                Object.freeze(obj[key]);
            }
        }
    }

    var person = {
        name: '张三',
        car: 'Mazda',
        son: {
            name: '李四',
            age: 18
        }
    }
    myFreeze(person);

    person.son.car = 'Benz';

    console.log(person);
})();

var initParam = function(){
    init1,
    constFn
}

initParam();